package cn.wolfcode.wolf2w.service;

import cn.wolfcode.wolf2w.domain.Strategy;
import cn.wolfcode.wolf2w.query.QueryObject;
import cn.wolfcode.wolf2w.query.StrategyQuery;
import cn.wolfcode.wolf2w.redis.vo.StrategyStatisVo;
import org.springframework.data.domain.Page;

import java.util.List;

public interface IStrategyService {
	/**
	 * 新增
	 * @param strategy
	 */
	void save(Strategy strategy);

	/**
	 * 更新
	 * @param strategy
	 */
	void update(Strategy strategy);

	/**
	 * 删除
	 * @param id
	 */
	void delete(String id);

	/**
	 * 查询单个
	 * @param id
	 * @return
	 */
	Strategy get(String id);

	/**
	 * 查询全部
	 * @return
	 */
	List<Strategy> list();

	/**
	 * 分页
	 */
	Page<Strategy> query(QueryObject qo);

	/**
	 * 添加或更新
	 * @param strategy
	 */
	void saveOrUpdate(Strategy strategy);

	/**
	 * 指定目的地下点击率最高的三篇攻略
	 * @param destId
	 * @return
	 */
	List<Strategy> queryByViewnum(String destId);

	/**
	 * 根据目的地查询攻略,并且分页
	 * @param qo
	 * @return
	 */
	Page<Strategy> queryByDestId(StrategyQuery qo);

	/**
	 * 修改状态,发布/上架
	 * @param id
	 */
	void updateStatus(String id,int state);

	/**
	 * 刷新增加阅读量,统计vo
	 * @param sid
	 * @return
	 */
	StrategyStatisVo statisVo(String sid);

	/**
	 * 攻略收藏
	 * @param sid
	 * @param uid
	 * @return
	 */
	boolean strategyFavor(String sid, String uid);

	/**
	 * 获取某个用户的攻略收藏列表
	 * @param userId
	 * @return
	 */
	List<String> getStrategiesFavor(String userId);

	/**
	 * 攻略点赞
	 * @param sid
	 * @param uid
	 * @return
	 */
	boolean strategyThumbup(String sid, String uid);

	/**
	 * 攻略vo持久化
	 * @param vo
	 */
	void updateStrategyVo(StrategyStatisVo vo);

	/**
	 * 根据目的地名字查询攻略
	 * @param destName
	 * @return
	 */
	List<Strategy> findByDestName(String destName);

}
